类在java中将具有多个变量类型的对象传递到arraylist时遇到问题
我试图将一个从文件创建的对象保存到arraylist中,但在一个三类程序中,我很难做到这一点。我得到一个错误,告诉我创建构造函数,但当我自动创建它们时,我得到一个错误,说:Constructor cannot be applied to given types
。我不知道这是什么意思。简言之,这件事我已经做了好几个小时了,现在还没弄明白
public class Darbuotojas {
String vardas;
String pareigos;
int gm;
Float atlyginimas;
public Darbuotojas(String vardas, String pareigos, int gm, Float atlyginimas){
this.vardas = vardas;
this.pareigos = pareigos;
this.gm = gm;
this.atlyginimas = atlyginimas;
}
}
下面是我读取文件并尝试将对象Darbuotojas
放入ArrayList的代码:
public class Viskas extends Darbuotojas{
String gm1;
String atlyginimas1;
ArrayList<Darbuotojas> darbuotojai = new ArrayList<Darbuotojas>();
public void failas(String fl) throws IOException{
//Failu nuskaitymas po zodi
File file = new File(fl);
try {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String line = null;
while ((line = br.readLine()) != null){
String [] tokens = line.split("/");
vardas = tokens[0];
pareigos = tokens[1];
gm1 = tokens[2];
gm = Integer.parseInt(gm1);
atlyginimas1 = tokens[3];
atlyginimas = Float.parseFloat(atlyginimas1);
System.out.print(vardas.toUpperCase() + " ");
System.out.print(pareigos.toUpperCase() + " ");
System.out.print(gm + " ");
System.out.println(atlyginimas);
Darbuotojas drb = new Darbuotojas(vardas,pareigos,gm,atlyginimas);
darbuotojai.add(drb);
System.out.println(drb);
}
br.close();
}
catch(FileNotFoundException e){
}
}
}
以下是主要功能:
public static void main(String[] args) throws IOException {
Scanner kb = new Scanner(System.in);
System.out.println("Iveskite duomenu vailo pavadinima su failo tipu: ");
String fl = kb.next();
Viskas ddd = new Viskas();
ddd.failas(fl);
}
我很抱歉所有的变量都是立陶宛语的,但我不认为这会改变代码的可读性
# 1 楼答案
Darbuotojas有一个已定义的构造函数。Viskas扩展了Darbuotojas,但它不调用其父Darbuotojas的构造函数。只需为Viskas创建一个构造函数,并将super()放在顶部
# 2 楼答案
也许一个例子有助于更好地解释解决方案。假设有两个类,分别是Vehicle和Car。Car扩展了车辆,使车辆能够继承车辆的所有特征
父类:
儿童班:
当您没有在类中定义构造函数时,它会自动在类中创建这些构造函数,下面是它的样子
父类:
儿童班:
当您在父类(如bellow)中定义构造函数时,它将不再具有带有空参数的默认构造函数
所以,如果您试图创建一个子类而不定义构造函数,它将如下所示
现在上面将给出一个编译错误,因为子类(Car)正试图用空参数调用其父类(Vehicle)构造函数。所以要解决这个问题,你有两个选择
选项1:将空参数构造函数添加到父类
选项2:在调用父类构造函数的子类中定义一个构造函数
# 3 楼答案
在您的示例中,您正在实例化一个新的
Viskas
。由于Viskas
扩展了Darbuotojas
并且没有自己的构造函数,因此调用Darbuotojas
的构造函数时缺少参数。要解决此问题,请在创建新Viskas
时传入所需的参数:或者为
Darbuotojas
创建无参数构造函数